package com.universalInterface.lims_interface.common.utils;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author Lx
 * @date 2023/12/20 11:05
 * @description 业务编码规则
 */
public class CodeRuleUtil {

	/**
	 * 生成一定规则的递增编号
	 * <br/> 格式：字符串前缀 + 当前编号（从1开始，不够前补0）
	 * <br/> eg：TEST-0001 / TEST-001
	 * <p>
	 * 		说明：1、synchronized解决线程安全问题
	 * </p>
	 * @param prefix 字符串前缀
	 * @param nowNum 当前编号
	 * @return 新生成编号
	 */
	public static synchronized String getAutoIncrementNo(String prefix, Integer nowNum) {
		if (prefix == null || prefix.length() == 0 || nowNum == null || nowNum < 0) {
			return null;
		}
		StringBuilder s = new StringBuilder();
		AtomicInteger count = new AtomicInteger(nowNum); // AtomicInteger 原子类型：解决线程安全

		// 4位编号数字编号
		if (count.get() < 9999) {
			return s.append(String.format(prefix + "-" + "%04d", count.incrementAndGet())).toString();
		}

		// 6位编号数字编号
		if (count.get() < 999999) {
			return s.append(String.format(prefix + "-" + "%06d", count.incrementAndGet())).toString();
		}
		// 8位编号数字编号
		return s.append(String.format(prefix + "-" + "%08d", count.incrementAndGet())).toString();
	}

}
